\chapter{Introduction}
      
\section{Motivation}
Programmers and scientist who process geometric data with various algorithms 
will most likely have to convert those data every now and then. Whenever a
Programmer uses a third party library to process his data it is very improbable
that this library will accept data in exactly the format in which the data is
already available. This fact becomes even more crucial in the area of \emph{Open Source}
where many rather small and specialized libraries are more available than larger 
packages from one single publisher. 
Even if no third party libraries are used, it is occasionally good practice to 
convert ones geometric data. Since the complexity of an algorithm may depend a lot on 
the input data structures, a prior conversion might speed up the processing of some
algorithms. Of course, such a conversion can simply be included at the beginning
of the processing algorithm as it is probably often done.
However, there is an important disadvantage in including conversions into the processing
routines of algorithms; The result of the conversion is no longer available 
once the conversion routine returned. % worse run time % less code reuse
All in all it is desireable to have a library which is able to convert geometric
data amongst many of the possible \emph{in memory}-representations as well. Further
it would be very helpful if such a library would offer ways to import and export 
from and to, respectively, many \emph{on-disk}-representations of geometric data.

\section{Geometric Data}
Throughout this text the term\emph{gometric data} stands for any data-structure 
containing information about the shape of a (geometric) volume. Though the geometric
data is not required to describe shapes of bodies of a specific dimension, it is 
hereby %FIXME erwähnt
mentioned that this text as well as the accompanying (draft of a) library focus on data-structures
describing the shape of three dimensional volumes, such as real-world physical bodies.
Further, the term data-structure is not restricted to the concept of a data-structure
as it is defined by the \emph{C- and C++-}programming languages. A data structure 
is rather supposed to describe any defined amount of memory, independently of its 
organisation. 

\subsection{Attached Data}
Besides the geometric data ,there also exists data which is closely related to the geometry such
as colors or friction coefficients. Some of this data is so closely bound to the geometry, that it
might even be considered to be part of the geometry. Therefore, a library dealing with conversions
should also care about those data.
Basically those data can be considered as properties of either a geometric body or of parts of
the body. In many cases the conversion of those data won't cause any problems as it can just be passed
on from the \emph{source type} to the \emph{target type}. 
However a problem arises if the part of the geometry, to which the data has been attached,
no longer exists in the target type. For example, this would be the case if we would like to convert
a Polygon List to a Nurbs data structure. If there was data, e.g. Texture Coordinates attached to the Vertices 
of the PolygonList, we would no longer be able to just pass the data from the source to the target type, because
there are no Vertices in the NURBS datastructure to which the data could be anchored. 

 %Reference%

%\section{Conversion} 
%      \item{A and B describe the same entity.}
%            \item{Ideally no information is lost.}
%    \end{itemize}


% Definition... What is a Conversion ... %
% Lossy / Lossless %

% Source Type Target Type
% Cost of a Conversion --> Also depends on your needs --> Cost of a Conversion  
%                          not take into acount the features of the arget Type.
%                      --> However an Advantage when doing "MultiHop" Conversion
% Loss of a Conversion
% Conversion just a special Algorithm
% Computing Time
% Memory Requirements
% 
% Reliability
%  -> Behaviour on failure
% Requirements to the Source Type
% Conversion from one Type to another can be done via another Type

